Apparatus and method for associating voxel information with display positions

ABSTRACT

An apparatus and method of associating display positions on a display with display information associated with voxels in a voxel block where the voxels are mappable to a display coordinate system defined by a view plane. The method and apparatus involve scanning voxel positions in the voxel block, according to a scan order in which column positions in respective planes through the voxel block which are progressively farther from a base point in the voxel block are addressed in order of those which map to foreground positions in the view plane before those which map to more background positions in the view plane to produce position specifiers identifying renderable voxel positions in the voxel block, determining respective display positions for each position specifier according to a display position mapping and associating respective display positions with corresponding position specifiers such that position specifiers which map to display positions which already associated with position specifiers identify more foreground positions on the display are not associated with display positions.

BACKGROUND OF THE INVENTION

[0001] 1. Field of Invention

[0002] This invention relates to voxel rendering to produce a display image based on voxel data.

[0003] 2. Description of Related Art

[0004] In the field of rendering voxel information to produce a display, it is common practice to employ ray tracing techniques to identify voxels which map to display locations and then to determine from the identified voxels, which ones are to be seen on the display and which ones are to be occluded.

[0005] The mapping of voxels to display locations using ray tracing techniques involves numerous floating point computer calculations, which can be very time consuming, especially if a large number of voxels are to be rendered. Such calculations take time to perform and thus the greater the number of voxels in a voxel object, the greater the time required to perform a render.

[0006] Similarly, once the mapping has been determined, priority must be determined for each voxel to determine which ones are to be seen and which ones are to be occluded. This again takes time and involves addressing every voxel in the voxel object and performing calculations on each to determine priority. Obviously the greater the number of voxels in the voxel object, the longer the time required to perform the render.

[0007] What is desired therefore is an apparatus that addresses these problems.

SUMMARY OF THE INVENTION

[0008] The present invention addresses the above needs by providing an apparatus and method for associating display positions on a display, with display information associated with voxels in a voxel block, the voxels being mappable to a display coordinate system defined by a view plane. The method involves scanning voxel positions in the voxel block, according to a scan order in which column positions, in respective planes through the voxel block which are progressively farther from a base point in the voxel block are addressed in order of those which map to foreground positions in the view plane before those which map to more background positions in the view plane, to produce position specifiers identifying renderable voxel positions in the voxel block. Then respective display positions for each position specifier are determined according to a display position mapping and respective display positions are associated with corresponding position specifiers such that position specifiers which map to display positions which are already associated with position specifiers identifying more foreground positions on the display are not associated with display positions.

[0009] Associating may involve assigning references associated with respective position specifiers to respective display positions, the references identifying display attributes of voxels at the respective position specifiers.

[0010] Identifications of the respective display positions and their associated references may be provided to a rendering routine.

[0011] The method may include identifying the renderable voxel positions and this may involve identifying columns within a renderable column range. Identifying columns may involve addressing a plane and producing column addresses of columns progressively farther from an edge of the voxel block, in the plane. A position specifier may be produced for each voxel associated with a column address that is within a renderable column range.

[0012] Identifying renderable voxels may involve identifying columns, which have active voxels, and this may involve producing a column address and using the column address to locate active voxels in the column identified by the column address.

[0013] The method may involve determining a plane axis along which each plane in the succession of planes is defined and may involve determining a column axis and producing column addresses specifying columns progressively farther from the plane axis in a plane until a column address of a column within a renderable column range and having active voxels is located.

[0014] Producing column addresses may involve producing a plane coordinate along the plane axis to specify a plane orthogonal to the plane axis and producing a column coordinate along the column axis to specify a column in the plane specified by the plane coordinate.

[0015] Producing a position specifier may involve producing a set of coordinates specifying a column of voxels in an x-z plane of the voxel block and specifying a voxel in the column of voxels, the plane coordinate and the column coordinate specifying the column in the x-z-plane and a y-coordinate of the voxel block specifying the voxel in the column specified by the plane and column coordinates.

[0016] The method may involve storing an indication of whether or not a position specifier has been associated with a given display position and reading the indication when the given display position is computed for a given position specifier and outputting the reference to the given position specifier when the indication indicates that a position specifier has not already been associated with the given display position.

[0017] The method may involve executing an initialization routine prior to producing the set of position identifiers. The initialization routine may involve determining the scan order and establishing a mapping between coordinates in the voxel block and the display positions. Determining the scan order may involve determining the base point and determining plane and column axes of the voxel block. Determining the base point may involve mapping corners of the voxel block to the display coordinate system and producing normalized corner vectors for each mapped corner of the voxel block. Determining the base point may further involve finding a corner vector from the origin in the display coordinate system to a mapped corner point of the voxel block that forms a larger angle than all other corner vectors with a display orientation vector representing an orientation of the view plane.

[0018] The display orientation vector may be determined by finding which of two orthogonal vectors and their corresponding parity reverse counterparts, along display axes in the display coordinate system, is most parallel to a vector in the display coordinate system representing a mapping of a y-axis of the voxel block. Determining a plane axis may involve determining an edge of the voxel block that contains the base point and that appears to extend in a direction progressing most rapidly away from the view plane when mapped to the display coordinate system. The plane axis may be defined as a line in the voxel coordinate system, coincident with the edge. Determining a column axis may involve defining as the column axis a line in the coordinate system which is coincident with the base point and which intersects the plane axis and which is at an angle to a y-axis of the voxel block.

[0019] The initialization routine may involve computing a mapping such as a parallel projection mapping, for mapping points in the voxel block to points in the display coordinate system. It may also involve producing a clipping table. The clipping table may be used to determine whether a voxel is renderable. Producing a clipping table may involve producing a table having fields associated with corresponding columns in the voxel block and populating the fields with indicators indicating whether or nor a set of position indicators is to be produced for corresponding columns. Alternatively or in addition the fields may be populated with range indicators indicating ranges of voxels within a corresponding column, for which a set of position indicators is to be produced. Clipping tables permit slicing through the voxel block, for example.

[0020] The initialization routine may involve initializing a priority completion buffer and the method may involve storing in the priority completion buffer an indication of whether or not a given display position has been associated with a reference to a position specifier and reading the indication when the given display position is computed for a given position specifier and outputting the reference to the given position specifier when the indication indicates that a position specifier has not already been associated with the given display position.

[0021] In accordance with another aspect of the invention, there is provided a method of associating display positions on a display with display information associated with voxels in a voxel block, the voxels being mappable to a display coordinate system defined by a view plane. The method may involve, for each plane in a succession of planes comprised of voxel columns in the voxel block, where the planes are progressively farther from the view plane and from a base point of the voxel block, producing a set of position specifiers for renderable voxels in each column of each plane, computing a display position for each position specifier in the set and producing a reference to one of the position specifiers if a reference to said one of the position specifiers has not already been produced for the display position.

[0022] In accordance with another aspect of the invention there is provided a method of associating display positions on a display with display information associated with voxels in a voxel block, the voxels being mappable to a display coordinate system defined by a view plane. The method may involve establishing a mapping between coordinates in the voxel block and display positions of the display, computing a scan order for scanning positions of the voxel block, scanning positions in the voxel block in the scan order, producing position specifiers for positions which are to be considered for rendering, using the mapping to produce a display position for each position specifier, and producing a reference to the position specifier if a reference to the position specifier has not already been produced for the display position.

[0023] In accordance with another aspect of the invention there is provided a method of associating display positions on a display with display information associated with voxels in a voxel block, the voxels being mappable to a display coordinate system defined by a view plane. The method may involve determining from the voxel block and the view plane a parallel projection mapping for mapping points in the voxel block coordinate system to points in the display coordinate system, employing the parallel projection mapping to determine which corner of the voxel block appears closest to the view plane and to determine which edge of the voxel block appears to extend in a direction progressing most rapidly away from the view plane, defining a plane axis as an axis which is coincident with the edge which appears to extend in a direction progressing most rapidly away from the view plane and defining a column axis as a line which is coincident with the base point and which intersects the plane axis and which is at an angle to a y-axis of the voxel block, producing voxel position specifiers, each comprising a coordinate on the plane axis, a coordinate on the column axis and a coordinate on the y-axis, the voxel position specifiers being those of voxels in columns parallel to the column axis and in successive positions along the plane axis which are progressively farther from the view plane, computing a display position for each position specifier, and producing a reference to the position specifier if a reference to the position specifier has not already been produced for the display position.

[0024] In accordance with another aspect of the invention, there is provided an apparatus for associating display positions on a display, with display information associated with voxels in a voxel block, the voxels being mappable to a display coordinate system defined by a view plane. The apparatus includes a scanner, a mapper and an associator. The scanner scans voxel positions in the voxel block, according to a scan order in which column positions, in respective planes through the voxel block which are progressively farther from a base point in the voxel block are addressed in order of those which map to foreground positions in the view plane before those which map to more background positions in the view plane, to produce position specifiers identifying renderable voxel positions in the voxel block. The mapper determines respective display positions for each position specifier according to a display position mapping. The associator associates respective display positions with corresponding position specifiers such that position specifiers which map to display positions which are already associated with position specifiers identifying more foreground positions on the display are not associated with display positions.

[0025] The associator may be operable to assign references associated with respective the position specifiers to respective display positions, the references identifying display attributes of voxels at the respective position specifiers.

[0026] The apparatus may further include an identifier for identifying the renderable voxel positions. The identifier may be operable to identify renderable voxels by identifying columns which have active voxels. This may involve identifying columns within a renderable column range. This may be done by addressing a plane in the succession of planes and producing column addresses of columns progressively farther from an edge of the voxel block, in the plane. A position specifier may be produced for each voxel associated with a column address, when the column address is within the renderable column range.

[0027] The scanner may be operable to determine a plane axis along which each plane in the succession of planes is defined and to determine a column axis and produce column addresses specifying columns progressively farther from the plane axis in a plane in the succession of planes until a column address of a column within a renderable column range and having active voxels is located.

[0028] The scanner may produce a plane coordinate along the plane axis to specify a plane orthogonal to the plane axis and may produce a column coordinate along the column axis to specify a column in the plane specified by the plane coordinate. The scanner may produce a set of coordinates specifying a column of voxels in an x-z plane of the voxel block and may specify a voxel in the column of voxels, where the plane coordinate and the column coordinate specify the column in the x-z-plane and a y-coordinate of the voxel block specify the voxel in the column specified by the plane and column coordinates.

[0029] The apparatus may employ a processor circuit for storing an indication of whether or not a position specifier has been associated with a given display position. The processor circuit may read the indication when the given display position is computed for a given position specifier and output the reference to the given position specifier when the indication indicates that a position specifier has not already been associated with the given display position.

[0030] The processor circuit may execute an initialization routine prior to producing the set of position identifiers. This may involve determining the scan order and establishing a mapping between coordinates in the voxel block and the display positions. Determining the scan order may involve determining the base point and plane and column axes of the voxel block.

[0031] The processor circuit may be operable to map corners of the voxel block, to the display coordinate system and produce normalized corner vectors for each mapped corner of the voxel block and may be operable to find a corner vector, from the origin in the display coordinate system, to a mapped corner point of the voxel block, wherein the base corner vector forms a larger angle than all other corner vectors with a display orientation vector representing an orientation of the view plane.

[0032] The processor circuit may be operable to determine the display orientation vector by finding which of two orthogonal vectors and their corresponding parity reverse counterparts, along display axes in the display coordinate system, is most parallel to a vector in the display coordinate system representing a mapping of a y-axis of the voxel block.

[0033] The processor circuit may be operable to determine an edge of the voxel block, that contains the base point and that appears to extend in a direction progressing most rapidly away from the view plane when mapped to the display coordinate system and to define the plane axis as a line in the voxel coordinate system, coincident with the edge.

[0034] The processor circuit may define as the column axis a line in the coordinate system which is coincident with the base point and which intersects the plane axis and which is at an angle to a y-axis of the voxel block.

[0035] The processor circuit may compute a parallel projection mapping for mapping points in the voxel block to points in the display coordinate system.

[0036] The processor circuit may produce a clipping table and using the clipping table to determine whether a voxel is renderable. The clipping table may have fields associated with corresponding columns in the voxel block and the fields may be populated with indicators indicating whether or nor a set of position indicators is to be produced for corresponding columns. Alternatively, or in addition, the processor circuit may populate the fields with a range indicator indicating a range of voxels within a corresponding column, for which a set of position indicators is to be produced.

[0037] The apparatus further includes a priority completion buffer operable to store an indication of whether or not a given display position has been associated with a reference to a position specifier. The processor circuit may read the indication when the given display position is computed for a given position specifier and to output the reference to the given position specifier when the indication indicates that a position specifier has not already been associated with the given display position.

BRIEF DESCRIPTION OF THE DRAWINGS

[0038] In drawings which illustrate embodiments of the invention,

[0039]FIG. 1 is a block diagram of an apparatus for associating display positions on a display, with display information associated with voxels in a voxel block;

[0040]FIG. 2 is a perspective view of the voxel block of FIG. 1;

[0041]FIG. 3 is a schematic representation of a column oriented data structure stored in a memory of the apparatus shown in FIG. 1;

[0042]FIG. 4 is a flowchart of a method for associating display positions on a display, with display information associated with voxels in a voxel block;

[0043]FIG. 5 is a flowchart of an alternative implementation of the method shown in FIG. 4;

[0044]FIG. 6 is a flowchart of an initialization routine shown in FIGS. 4 and 5;

[0045]FIG. 7 is a schematic representation of a process for determining a mapped y-vector corresponding to a vector on a y-axis of the voxel block of FIG. 2;

[0046]FIG. 8 is a schematic representation of a process for determining a screen orientation vector according to the method of FIGS. 4 and 5;

[0047]FIG. 9 is a schematic representation of a process for determining a corner vector, according to the method of FIGS. 4 and 5;

[0048]FIG. 10 is a schematic representation of a process for determining a base point and plane and column axes of the voxel block of FIG. 2;

[0049]FIG. 11 is a tabular representation of a mapping transformation for mapping points in a voxel co-ordinate system to display positions;

[0050]FIG. 12 is a schematic representation of a column inclusion clipping table produced according to the routine shown in FIG. 6;

[0051]FIG. 13 is a schematic representation of the voxel block of FIG. 2 shown with a clipping plane produced by the table shown in FIG. 12;

[0052]FIG. 14 is a schematic representation of the voxel block of FIG. 2 shown with a clipping plane produced by the table shown in FIG. 15;

[0053]FIG. 15 is a flowchart of an associating routine according to the method shown in FIGS. 4 and 5; and

[0054]FIG. 16 is a block diagram of an apparatus according to an alternative embodiment of the invention.

DETAILED DESCRIPTION

[0055] Referring to FIG. 1, an apparatus according to one embodiment of the invention is shown generally at 10. In this embodiment, the apparatus comprises a computer system, such as a personal computer having a processor circuit 12, program memory 16 and random access memory 18. The processor circuit 12 has a virtual memory mapping unit (VMMU) 13 which converts logical addresses provided by any application programs running on the processor circuit to physical memory address space in the random access memory 18. The processor circuit 12 runs an operating system (not shown) which is operable to define cache memory within the random access memory 18 and to work in pages of memory therein.

[0056] The computer system 10 may further include a media reader 19 in communication with the processor circuit 12 for enabling the processor circuit to read a set of codes 20 or computer program, from a computer readable medium 22 such as a floppy disk, a hard disk, a CD-ROM, or a communications channel, for example. Alternatively, the set of codes 20 may be provided as segments of a signal embodied in a carrier wave received at a communications interface 21 in communication with the processor circuit 12, for example. In other words, the set of codes or program may be downloaded from a communications system such as the Internet, into the computer system 10 for example.

[0057] The set of codes 20 implements an associating program operable to be stored in the program memory 16. The program directs the processor circuit 12 to carry out functional actions according to a method for associating display positions with display information associated with data of a volume data set stored in a data structure, in accordance with other aspects of the invention. The data structure may be stored in a data structure area 70 of the RAM 18, for example, or in remotely accessible memory (not shown), remotely accessible by the processor circuit.

[0058] The set of codes 20 may contain a plurality of segments including an initialization segment 23 and an associating segment 25 as will be described below.

[0059] The embodiments herein relate to associating data in a volume data set with positions on a display, for use rendering data from the data set on the 2D graphics display 24 of the computer system 10. The methods and apparatus described herein associate the data with display positions and pass the associated data to other programs, not described herein, which make use of the associated data to perform a render.

[0060] Referring to FIG. 2, the methods and apparatus described herein are intended to be used with a volume data set representing geometric and attribute information about voxels in a voxel block such as shown at 30. Generally, a data acquisition device (not shown) such as a medical imaging device, x-ray device or computer axial tomographic (CAT) x-ray system, for example, may be used to generate geometric and attribute data for a plurality of voxels 32 in the voxel block 30. Alternatively, the volume data set may be received from a graphics application program running on the processor circuit 12 shown in FIG. 1 or may be provided to the processor circuit 12 from an external source through the media reader 19 or communications interface 21, for example. The graphics application program may facilitate entry of volume data through the use of a keyboard or mouse, for example. In this embodiment, the volume data set provided by any source includes geometric information and attribute information including visual information such as color, surface, normal vectors, density and layer information, for example. Attribute information is not limited to visual information or to the examples given here and could include other information, such as smell, sound or tactile information, for example. The type of information included as an attribute may alternatively, or may also be user-defined.

[0061] Referring back to FIG. 2, in this embodiment, the voxel block 30 for which the volume data set represents data is a generally orthorhombic shaped 3-dimensional space divided into a regular grid defining a plurality of generally cubic sub-regions (voxels 32) of the voxel block 30.

[0062] Alternatively, the voxel block 30 may be any other solid-shaped 3-dimensional space divided into a plurality of smaller sub-regions. For example, the voxel block 30 may be approximately cylindrically shaped and the voxels may be small cubic regions or small regions of solid angles formed in columns. In this embodiment, the voxel block 30 is defined as an orthorhombic block as this shape is easily mapped into a 2-dimensional coordinate system under which most computer displays operate. Other display or annunciation systems however, may be more amenable to use with differently shaped voxel blocks.

[0063] In this embodiment, the voxel block 30 is defined by an origin 33 and maximum x, y and z voxel coordinate positions 34, 36 and 38 along orthogonal x, y and z axes 40, 42 and 44 intersecting the origin 33. The origin 33 and x, y and z axes together define a voxel coordinate system.

[0064] In this embodiment, a base 46 of the voxel block 30 lies in an x-z plane 48 established by the x and z axes while one side of the voxel block 30 is coincident with a y-z plane 50 established by the y-z axes and another side is coincident with an x-y plane established by the x-y axes. In this embodiment, a geometric position of each voxel 32 within the voxel block 30 can thus be represented by a three-tuple (x, y, z) specifying first, second and third Cartesian coordinates x, y and z. Attributes associated with a voxel 32 are specified in connection with the geometric position. Thus, the properties of each voxel 32 can be specified by a voxel record comprised of a representation of the geometric position of the voxel in the voxel block 30 and a representation of attributes associated with the voxel. In this embodiment, voxel records of the volume data set may therefore be said to have the following form: Voxel: (x, y, z, A₁, A₂, A₃, . . . A_(n)), where x, y, z and A₁, . . . A_(n) are elements of the record and the x, y, z elements specify geometric coordinates of the voxel 32 in the voxel block 30 and the elements A₁, . . . A_(n) specify n attributes associated with the voxel 32. Alternatively, other coordinate systems may be used and converted to Cartesian coordinates for direct use with the methods disclosed herein.

[0065] In general, the voxel block 30 may have non-active voxels such as shown at 60 having no representative information, such as measured information below a threshold level, and may alternatively or further include active voxels such as shown at 62 for which information has been obtained or provided. Effectively, active voxels 62 may represent an object within the voxel block 30 and hence the volume data set may be considered to define an object model which can be specified by three components including: 1) voxel block, or array parameters, i.e., the maximum x, y and z coordinates 34, 36 and 38 of the voxel block: (X_size, Y_size, Z_size); 2) an attribute definition defining the attributes associated with each voxel 32; and 3) a plurality of active voxel records each comprised of geometric information and attributes. In this embodiment the geometric information is represented by a three-tuple (x,y,z), and the attributes are specified according to the attribute definition.

[0066] The voxel block 30 may be considered to have a plurality of columns on the x-z plane, one of which is shown at 52, at the x-z position (4, 10). A column of active voxels 53 may be defined as being comprised of only the group of active voxels within a column 52. For example, the column 52 defined at the x-z position (4, 10) has five active voxels at y-positions 1,2,5,7 and 10, and has six non-active voxels at y-positions 0,3,4,6,8 and 9. Thus the column of active voxels 53 is considered to be comprised only of the voxels at y-positions 1,2,5,7 and 10. This avoids wasting memory locations that would otherwise be used to store information about inactive voxels.

[0067] The voxel associating method and apparatus described herein are intended for use with voxel information stored in a column-oriented data structure. A suitable column oriented data structure is described in International Patent Application No. PCT/CA01/00686, filed May 16, 2001. Generally in a column oriented data structure of the type referred to herein, a column of active voxels in a voxel block is associated with a group of memory locations, each of which is associated with a respective index and at least the geometric representations of active voxels in the column are stored in successive memory locations in the group. This permits a group of memory locations associated with a column of active voxels in the voxel block to be addressed. The individual memory location within the group can then be sequentially addressed, enabling fast access to voxel information, a column at a time, as will become apparent below.

[0068] An example of a column-oriented data structure with which the apparatus and methods according to the various embodiments of the invention operate is shown at 70 in FIG. 3. Broadly, this data structure includes a data area 72 and a management area 74.

[0069] The data area 72 includes a plurality of memory locations, each of which is associated with an index, an example of which is shown at 76. Any given index is associated with corresponding memory locations, or fields 78, 80, 82, 84, 86, in respective arrays 90, 92, 94, 96, 98 which store information about a voxel, such as a Y-coordinate, a layer value, a normal value, a color value and a density value, respectively. Thus, once an index is known, all memory locations associated with that index are known and hence, all information relating to the corresponding voxel is known.

[0070] The management area 74 includes a macro variable storage area 100, a base array 102 and a memory allocation control area 104. Generally, the macro variable storage area 100 includes fields 110, 112, 114 for storing a three-tuple specifying the maximum X, Y and Z coordinates of the voxel block and includes fields 116, 118, 120 and 122 for storing data defining a function φ for converting points in a global coordinate system to points in the voxel coordinate system. Effectively, the macro variable storage area 100 is used to store variables, which are used in an initialization routine described below.

[0071] The memory allocation control area 104 is used to allocate memory to the data structure and is not relevant in associating. However, during formation of the data structure and during storage and editing of data therein, the memory allocation control area essentially associates indices such as shown at 76 with memory locations such as shown at 78, 80, 82, 84 and 86.

[0072] The base array 102 is a two dimensional array which associates groups of indices, i.e., vertically in the y-array 90, and hence associates groups of memory locations in each array 90, 92, 94, 96 and 98 with columns of active voxels in the voxel block shown in FIG. 2. To do this the base array 102 has a pair of index and count fields 130 and 132 associated with each column in the voxel block. The index and count fields store values representing a starting index of a group of memory locations associated with a column of active voxels, and a count of the number of indices following the starting index which relate to memory locations associated with active voxels in the same column. Columns are identified by the X and Z coordinates of the voxel, hence the base array is a two dimensional array which is addressed by the X and Z coordinates of a column. Thus, given the X and Z coordinates of a column, the index field gives the index of the first memory location associated with the column, and the count field gives number of memory locations associated with the column.

[0073] Since the Y coordinates of the active voxels in the column are stored in association with respective indices in the group identified by the base array, the X and Z coordinates of a given voxel can be used to find the group of memory locations associated with the column and the Y coordinate of the given voxel can be used to search within the group for the associated index.

[0074] This index identifies all the memory locations in which all the attributes of the voxel are stored, for use in associating.

[0075] Referring back to FIG. 1 the processor circuit-readable codes which program the processor circuit 12 cause the processor circuit to interact with the data structure 70 shown in FIG. 3 to associate display positions on the display 24, with display information associated with voxels in the voxel block 30. The voxels are mappable to a display coordinate system defined by a view plane and the voxel block 30 has a base point in a voxel coordinate system. Association of voxel information with display positions is achieved by scanning voxel positions in the voxel block 30, according to a scan order in which column positions in respective planes through the voxel block 30 which are progressively farther from the base point are addressed in order of those which map to foreground positions in the view plane before those which map to more background positions in the view plane, to produce position specifiers identifying renderable voxel positions in the voxel block 30. Then respective display positions are determined for each position specifier according to a display position mapping and then respective display positions are associated with corresponding position specifiers such that position specifiers which map to display positions which are already associated with position specifiers identifying more foreground positions on the display are not associated with display positions.

[0076] Referring to FIG. 4, a flowchart representing the overall process of associating as implemented by the processor-readable codes is shown generally at 140. The process involves two routines including an initialization routine 142 and an associating routine 144. The initialization routine is performed using the function φ(x) and the X_size, Y_size and Z_size values from the macro variable storage area 100 which define the voxel block in the global coordinate system, and known or supplied data relating to X and Y display size values and a function ψ(x) which maps points from the global coordinate system into points in a view plane coordinate system and thus defines a position, size and orientation of a view plane in the global coordinate system. In this specific embodiment, the initialization routine involves computing a projection map, computing a scan order, computing address conversion tables, computing clipping tables and initializing a completion buffer. In this embodiment, the associating routine involves scanning voxel positions in the voxel block 30, according to a scan order in which column positions in respective planes through the voxel block 30 which are progressively farther from the base point are addressed in order of those which map to foreground positions in the view plane before those which map to more background positions in the view plane. Position specifiers identifying renderable voxel positions in the voxel block are then produced and respective display positions for each position specifier are determined according to a display position mapping. Respective display positions are then associated with corresponding position specifiers such that position specifiers which map to display positions which are already associated with position specifiers identifying more foreground positions on the display are not associated with display positions.

[0077] Initialization Routine

[0078] Referring to FIG. 6, the initialization routine will now be described. Effectively the initialization routine 140 directs the processor circuit to compute information that will be required to be used with a three-tuple produced by the associating routine, the three-tuple specifying a specific voxel, to determine whether a voxel representation in the form of a reference to an active voxel and a display address are to be provided to a rendering routine (not shown) operable to use the voxel representation to activate a pixel, for example on the computer display 24 to render the voxel.

[0079] The information which is computed in the initialization routine is based on the voxel block and the view plane positioned in a global coordinate system.

[0080] The voxel block coordinate system (and hence the voxel block's position and orientation) is described by a function φ that produces the voxel block coordinates of a point, given its global coordinates. The function φ employs a unique three-tuple pφ and a unique 3×3 orthogonal matrix Rφ such that for every point x (given in global coordinates), the corresponding point in voxel block coordinates is given by:

φ(x)=Rφx+pφ

[0081] In addition to Rφ and pφ, which define the position and orientation of the voxel block, the three integers X-size, Y_size and Z_size are supplied to define the dimensions of the voxel block. Rφ, pφ, X_size, Y_size and Z_size are all specified in the management area 100 of the data structure 70 shown in FIG. 3.

[0082] The view plane coordinate system (and hence the view plane's position and orientation) is described by a function ψ that produces the view plane coordinates of a point given its global coordinates. The function ψ employs a unique three-tuple pψ and a unique 3×3 orthogonal matrix Rψ such that for every point x (given in global coordinates), the corresponding point in view plane coordinates is given by: ${\psi (x)} = {\begin{bmatrix} 100 \\ 010 \end{bmatrix}\quad \left( {{R_{\psi}x} + p_{\psi}} \right)}$

[0083] In addition to Rψ and pψ, which define the position and orientation of the view plane, two integers X_SCREEN_SIZE and Y_SCREEN_SIZE are supplied to define the dimensions of the view plane.

[0084] The basic steps for initializing are indicated by blocks 152 and 154 which direct the processor circuit to determine the scan order and establish a mapping between coordinates in the voxel block and positions on the display 24. In the embodiment shown, additional steps identified as steps 150, 156 and 158 are also shown, however, these steps are specific to the implementation shown and could vary depending upon whether a projection map is already provided, clipping tables are already provided and depending upon the specific implementation of the priority/completion buffer.

[0085] In the embodiment shown, the first step in the initialization routine is represented by block 150 and involves determining a projection map which maps points in the voxel coordinate system into points in the display coordinate system. A variety of different maps may be employed, including parallel projection maps and perspective projection maps. In this embodiment a parallel projection map is used as this simplifies the calculations as only a view plane definition is required to determine the mapping. If a perspective projection map were used instead, additional information defining a viewpoint would also be required.

[0086] In this embodiment a parallel projection map π for a point x in the global coordinate system is defined by: π(x) = x − ((x − p_(ψ)) ⋅ n)n, where   $n = {R_{\psi}\begin{bmatrix} 0 \\ 0 \\ 1 \end{bmatrix}}$

[0087] Thus, a parallel projection map Π that produces the view plane coordinates of a point given its voxel block coordinates x_(v) is given by:

Π(x _(v))=(ψ∘π∘φ⁻¹)(x _(v))

[0088] This general transform will be referred to as a parallel projection transformation herein referred to as Π. Thus, in general the transformation Π determines display coordinates (X_(P), Y_(P)) associated with voxel coordinates (X_(v), Y_(v), Z_(v)). Thus, given any voxel coordinates (X_(v), Y_(v), Z_(v)) a corresponding display coordinate (X_(P), Y_(P)) can be produced.

[0089] While the implementation of the transform described herein is by use of a programmed processor circuit, it will be appreciated that a dedicated hardware function for achieving the same result may be implemented in an integrated circuit such as an application-specific integrated circuit. Regardless of how the transform is implemented any device which performs the function of mapping voxel block coordinates to view plane coordinates may be referred to as a mapper.

[0090] The next step in the initialization routine is represented by block 152, which directs the processor circuit to compute a scan order. Effectively, the scan order is represented by a base point and plane and column axes in the voxel co-ordinate system. The base point is the scan starting point in the voxel block 30 co-ordinate system, and the plane and column axes indicate the direction of incrementally addressing respective voxel positions in the voxel block 30 during the scan. Computing the scan order involves determining the base point and the plane and column axes of the voxel block 30.

[0091] As a first step in finding the base point, a display orientation vector u is determined. Effectively this involves finding which of two orthogonal vectors and their corresponding parity reverse counterparts, along display axes in the display coordinate system, is most parallel to a vector in the display coordinate system which represents a mapping of the y-axis of the voxel block 30.

[0092] To do this a unit vector 160 in the voxel coordinate system in the y direction 42 is first mapped into the display coordinate system using the parallel projection transformation Π to produce a mapped y vector 162 in the display coordinate system. Then, referring to FIG. 8, the dot products of the mapped y vector 162 and each of two orthogonal vectors 164 and 166 and their corresponding parity reverse counterparts 168 and 170 along the axes 172 and 174 of the display are taken, resulting in four dot products. The display orientation vector u is defined as the one of the orthogonal vectors 164 or 166 or its corresponding parity reversed vector 168, 170 which maximizes the dot product with the mapped y vector 162. Mathematically, this can be represented as: ${{Let}\quad u} \in {\left\{ {\left( {1,0} \right),\left( {{- 1},0} \right),\left( {0,1} \right),\left( {{0,} - 1} \right)} \right\} \quad {that}\quad {maximizes}\quad {u \cdot {\Pi \begin{bmatrix} 0 \\ 1 \\ 0 \end{bmatrix}}}}$

[0093] If any one of these unit vectors maximizes the above statement, any one may be selected. Next, referring to FIG. 9, determining the base point involves finding a normalized corner vector, from the origin in the display coordinate system, to a mapped corner point of the voxel block 30, which produces the smallest dot product with the display orientation vector representing an orientation of the view plane.

[0094] To do this, each of the eight voxel positions 181, 182, 183, 184, 185, 186, 187, 188 at the corners of the voxel block 30, is mapped, using the parallel projection transform, into corresponding positions 191, 192, 193, 194, 195, 196, 197, 198 in the display coordinate system. Each of these corresponding positions may be considered to define respective corner vectors, one of which is shown at 200, extending from the origin in the display coordinate system.

[0095] The base point is defined as the corner point of the voxel block 30, in the voxel coordinate system, associated with the corner vector in the display coordinate system, which when normalized produces the smallest dot product with the display orientation vector u. To find this point the scalar values representing the dot products of each of the eight corner vectors (normalized) with the display orientation vector u (166) are found. The base point is the corner point associated with the normalized corner vector 200 which forms the largest angle with the display orientation vector u. In the example shown in FIG. 9, the base point may be point 184. Mathematically, the determination of the base point may be represented as:

[0096] Let b be a corner of the voxel block (ie b ∈{(0, 0, 0), (0, 0, Z_size), (0, Y_size, 0), (X_size, 0, 0), (X_size, Y_size, 0), (X_size, 0, Z_size), (0, Y_size, Z_size), (X_size, Y_size, Z_size)} that minimizes ${u \cdot \Pi}\quad {\left( \frac{b}{b} \right).}$

[0097] Where there is more than one corner vector giving the smallest dot product, any of the associated corner vectors may be taken as determining the base point. In this embodiment the first of the smallest dot products found determines the base point. In the example shown, the base point is taken as point 184.

[0098] After finding the base point it is necessary to determine the plane and column axes of the voxel block 30. Determining the plane axis involves determining an edge of the voxel block 30, that contains the base point 184 and the projection of which forms the smallest angle with the display orientation vector. The column axis is the edge of the voxel block that contains the base point 184 and which when projected onto the view plane forms the greatest angle with the display orientation vector u.

[0099] To do this, referring to FIG. 10, two unit vectors 202 and 204 extending from the base point 184 in the direction of the x and z axes respectively of the voxel block are mapped, using the Π transform, into corresponding x edge and z edge vectors 212 and 214 in the display coordinate system. An angle is formed between each of the x edge and z edge vectors 212 and 214, with the display orientation vector u 166 and the edge associated with the smallest angle is considered to be associated with the plane axis while the other is considered to be associated with the column axis. Thus the plane axis will be either the x or z axis 40, 44 of the voxel block 30 and the column axis will be the other. In the example shown, the selection of the view plane has resulted in the same dot product for each edge vector. Thus, any one can be the plane axis. Take the z-axis 44 as the plane axis, for example. The x-axis 40 will be the column axis.

[0100] Mathematically, this can be represented as:

[0101] Let r be the unique corner of the voxel block such that r−b is parallel to the x-axis of the voxel block coordinate frame.

[0102] Let s be the unique corner of the voxel block such that s−b is parallel to the z-axis of the voxel block coordinate frame.

[0103] Then, if ${(\coprod){\left( \frac{r - b}{{r - b}} \right) \cdot u}} > {(\coprod){\left( \frac{s - b}{{s - b}} \right) \cdot u}}$

[0104] then the plane axis is the Z-axis, otherwise the plane axis is the X-axis.

[0105] Referring back to FIG. 6, next the processor circuit is directed to block 154, which causes the processor circuit to compute address conversion tables for mapping voxel positions in the voxel block 30 into corresponding display positions. These display positions may be linear video addresses for addressing specific pixels on the display 24, for example. In this embodiment, three address conversion tables are produced as shown in FIG. 1. These are identified as plane, column and y-direction tables. The plane table holds values representing integer multiples of a linear address transform of a point in the display coordinate system which represents a point representing a unit vector on the plane axis, in this example along z-axis 44 in a negative direction from the base point in the voxel block coordinate system. The plane transform may thus be represented as Vp(Π(0,0,1)) where (0,0,1) represents the unit vector in on the plane axis, Π is the parallel projection transform to transform the unit vector into display coordinates and V represents a contribution to the display address in the plane direction. Similarly, the column table holds values representing integer multiples of a linear address of a point in the display coordinate system which represents a point representing a unit vector on the column axis. The column transform may thus be represented as Vc (Π(1,0,0)). The y-direction table holds values representing integer multiples of a linear address transform of a point in the display coordinate system which represents a point representing a unit vector parallel the y axis 42 in the voxel block coordinate system and extending away from the base point. The y transform may thus be represented as Vy(Π(0,1,0)).

[0106] The full transform for obtaining a linear address from a plane, column and y-direction three-tuple (p,c,y) representing a voxel position in the voxel block is given as:

L=V _(o) +pVp(Π(0,0,1))+cVc(Π(1,0,0))+yVy(Π(0,1,0))

[0107] Since each position (p,c,y) in the voxel block can effectively be represented as integer extensions of unit vectors in each direction from the base point the above function is easily implemented in a fast lookup table as shown in FIG. 11. The p, c, and y coordinates are used as indices in the look-up table. The value L produced by the transform represents a linear address of the display or more generally a display position.

[0108] In the event that the x-axis had been found to be the plane axis, the entries under the Plane (z) and Column (x) headings would be interchanged and the headings would be changed to Plane (x) and Column (z).

[0109] Next, block 156 directs the processor circuit to compute clipping tables. As stated above these tables are optional and may be provided from an outside source. However, in the embodiment shown, these tables are computed. Effectively a clipping table includes fields associated with corresponding columns in the voxel block 30 and these fields are populated with indicators identifying columns in the voxel block for which position specifiers are to be produced and/or are populated with indicators specifying a range of y-values within the associated column for which position specifiers are to be produced.

[0110] A clipping table may have the same dimensions as the base array 102 shown in FIG. 3, for example. In one implementation, there may be two clipping tables, one for column inclusion and the other for range definition. One or the other or a combination of both may be employed. An example of a column inclusion-clipping table is shown at 221 in FIG. 12. Note that a small number of fields in rows 220 are populated with ones while the remaining fields in rows 222 are populated with zeros. This has the effect of producing a clipping plane 224 in the voxel block, as shown in FIG. 13, such that voxels in the shaded area 226 are not included in the render. Generally boundaries defined by ones and zeros in adjacent rows define clipping planes parallel to the y-z plane while boundaries defined by ones and zeros in adjacent columns define clipping planes parallel to the x-y plane. It will be appreciated that by populating the clipping table with any arrangement of ones and zeros clipping boundaries of any shape can be defined. Effectively, the column inclusion-clipping table shown in FIG. 12 may be used to define which columns are to be rendered and which are not.

[0111] Similarly, referring back to FIG. 12, a range clipping table may define limits in the y-direction between which voxels are to be included in the render and outside of which voxels are not to be included in the render as shown at 223.

[0112] In this table, each position in the table identifies the range of y values such as 0 to 50, for example, which are to be included in the render. This has the effect of defining clipping boundaries vertically within the voxel block 30, to create clipping planes parallel to the x-z axes as shown in FIG. 14. By populating the range clipping table appropriately, clipping boundaries of any shape can be defined.

[0113] It will be appreciated that by using a combination of a column inclusion clipping table and a range clipping table, a clipping boundary of any convex shape can be defined.

[0114] Referring back to FIG. 6, in this embodiment, the final step in the initialization routine is shown as block 158 and involves the initialization of a priority/completion buffer shown at 225 in FIG. 1. The priority/completion buffer 225 is formed in the memory and may be considered to be a linear array of the same dimensions as the linear address range of the display, for holding indicators representing whether or not an associated display address has already been associated with a reference to a position specifier. Initially, all values in the priority/completion buffer are initialized to a non-display representation, such as 0 and the buffer positions are populated with ones or zeros by the associating routine 144 to indicate whether or not the corresponding display address has already been associated with a reference.

[0115] Associating Routine

[0116] Referring to FIG. 15, the associating routine 144 follows the initialization routine (142). The associating routine 144 includes a voxel addressing and verification portion 230 and a priority establishment and output portion 232. The voxel associating and verification portion effectively causes the processor circuit to scan the voxel block 30 using the scan order determined in the initialization routine to produce position specifiers identifying renderable voxel positions in the voxel block 30. This involves producing voxel addresses according to the scan order and determining whether a voxel at each address produced is renderable. The priority establishment and output portion causes the processor circuit to compute a display position using the address conversion tables produced in the initialization routine and to associate respective display positions with corresponding position specifiers such that position specifiers which map to display positions which are already associated with position specifiers identifying more foreground positions on the display are not associated with display positions. Position specifiers may be associated with display positions by assigning references associated with respective position specifiers to respective display positions, the references identifying display attributes of voxels at the respective position specifiers. The references may be the indices, such as shown at 76 in FIG. 3, for example.

[0117] The voxel addressing and verification portion 230 involves a first block 234 which causes the processor circuit to produce column addresses beginning at the base point 184 and advancing along the column axis for each position along the plane axis. Initially, as shown in FIG. 12, a plane axis position of zero is selected, defining a first, most foreground plane 235 on the zero 1S position of the plane axis and extending in the y-direction of the voxel block. This first plane contains the base point 184. Next, a column axis position of zero, relative to the base point 184 is selected, defining a first column 237 address of a column of voxels containing the base point. This column 237 would appear most foreground in the view plane if mapped into display coordinates. Thus, column addresses are specified by plane and column axis coordinates.

[0118] After a column address has been determined, blocks 236 and 238 direct the processor circuit to identify whether the column addressed is within a renderable column range, as part of determining whether a voxel is renderable. Block 236 directs the processor circuit to determine whether the column at that address contains active voxels. This is done by converting the determined column address into x-z coordinates in the voxel block coordinate system and addressing the base array shown at 102 in FIGS. 3 and 12, with these x-z coordinates, to determine whether the index field 130 contains a valid index value. If it does not, there is no starting index of active voxels in the column and thus no active voxels in the column. If this is the case, the processor circuit is directed back to block 234 to set a new column address identifying the next column 239 in the first plane, which is the next most foreground column in the plane. If addresses for all columns in the first plane 235 have been produced, the plane axis coordinate is advanced to identify a next most foreground plane 241 behind the first plane 235 and the column axis coordinate is sequenced through coordinates from foreground to background. This has the effect of addressing a plane in a succession of planes which are progressively farther from the base point 184 and producing column addresses of columns progressively farther from an edge of the voxel block, in the addressed plane.

[0119] If at block 236 the index field 130 is found to contain a valid index, the column addressed by the current column address is identified as having active voxels. As a result, the processor circuit is directed to block 238 which causes it to use the converted column address, in x-z coordinates of the voxel coordinate system, to address the column inclusion clipping table 221 shown in FIG. 12. The x-z coordinates in the voxel coordinate system may then be used to locate the corresponding position in the clipping table to determine whether it contains a one or a zero. If it contains a zero, the column has been clipped and is not renderable and the processor circuit is directed back to block 234 to set a new column address.

[0120] If the clipping table contains a one, the column is renderable and the processor circuit is directed to block 240, which directs it to set a voxel address within the column. To do this, the processor circuit is directed to the starting index of the first active voxel in the column, as determined by the contents of the index field 130 in the base array position identified by the x-z coordinates of the column address. The processor circuit is then directed to use the starting index to address the y-array 90 to locate a y-coordinate associated with the starting index.

[0121] At block 242 the processor circuit compares the y-coordinate to the range of values specified in the associated column position in the range clipping table shown at 223 in FIG. 12, specified by the x-z coordinates in the voxel coordinate system. If the y-coordinate is out of the range specified, the processor circuit is directed back to block 240 which causes it to find the y-coordinate of the next index in the active column specified by the column address. Thus, the processor circuit loops through blocks 240 and 242 until there are no more indices associated with active voxels in the addressed column, at which time it is directed back to block 234 to determine a new column address. Or, if during the above looping, a y-coordinate within the range specified by the indicated position in the range clipping table is found, the column address and the y-coordinate together are considered to be a position specifier specifying a renderable voxel position in the voxel block. The processor circuit is then directed to the priority establishment and output routine 232.

[0122] As a result of completing the voxel addressing and verification routine the processor circuit has effectively produced renderable voxel position specifier in the form of a three-tuple comprised of a plane axis value, a column axis value and a y-value. This three-tuple is received at a first block 250 of the priority establishment and output routine, which directs the processor circuit to compute a display position according to the display position mapping provided by the look up tables shown in FIG. 11.

[0123] Once the display position is known, it is used at block 252 to address the priority/completion buffer 225 to determine whether the corresponding position contains a zero or a one. If it contains a one, that position is not empty, meaning that a position specifier has already been associated with that display position. In this case the processor circuit is directed back to block 240 to advance to the next voxel position in the addressed column.

[0124] If at block 252 the corresponding position of the priority/completion buffer 225 is zero, no position specifier has yet been associated with that display position and the processor circuit is directed to block 254 which causes it to associate the current position specifier with its corresponding display position. In this embodiment this achieved by assigning a reference to the position specifier to the corresponding display position and the reference is the index such as shown at 76 which identifies the voxel record in the base array, which holds information to be used in rendering display information about the voxel. Assigning the reference may involve outputting a number pair, including the display position and the index, to a rendering program (not shown) to allow the rendering program to use the index to access information in the appropriate array of the data structure 70 for use in rendering, when information required to activate the display position associated therewith is required for use in producing a display image on the display 24, for example. Alternatively, the display position/index number pair may be transmitted to a remote location at which the same data structure 70 is stored, to create a rendering of voxel information at a remote site.

[0125] After outputting the number pair above, block 256 causes the processor circuit to associate a one with the above determined display position in the priority/completion buffer, so that if another position specifier which maps to the same display position should be produced, it will not replace the position specifier already associated with that display position. Thus, subsequent position specifiers which map to display positions with which position specifiers have already been associated are occluded.

[0126] The processor circuit is then directed back to block 240 to advance to the next voxel position in the addressed column and repeat the priority establishment and output routine for a new position specifier.

[0127] As a result of the scan order, the most foreground plane having renderable voxels is considered first, the next most foreground plane is considered and so on, until the most background plane is considered. This ensures that the voxel positions of renderable voxels in the more foreground planes are associated with display addresses before voxel positions of renderable voxels in the more background planes and thus the priority/completion buffer is progressively loaded as a result of references being assigned to display addresses produced in the foreground planes first. Consequently, the foreground planes are given priority in assignment of references to display positions, which automatically causes occlusion of renderable voxels in more background planes which would map to display positions to which references have already been assigned for position specifiers in more foreground planes. Thus, a relatively small set of data, comprised of display positions and references to renderable voxels, which are not occluded, is passed to a rendering program.

[0128] Once provided with a display position and reference pair, the rendering program (not shown) can use the reference to obtain normal and color information, for example, as may be stored in the color and normal arrays 96 and 94 respectively in the data structure 70 and may load a display buffer with this information to drive a display, such as the display 24 shown in FIG. 1. In addition, or alternatively, lighting effects may be calculated for each display position/reference number pair produced by the associating routine to modify the color values stored in the color array 96 prior to loading the display buffer.

[0129] While the operations of scanning the voxel block and associating references with display positions are described as being implemented by a processor circuit which is programmed by processor readable instructions, these operations may alternatively be implemented by dedicated hardware devices such as integrated circuits which may include application specific integrated circuits (ASICs). Thus an ASIC may have a functional block which acts as a scanner, for example, which is designed to determine the base point and scan order and use these to scan the voxel block.

[0130] In addition, the priority/establishment routine is described as being carried out by a processor circuit but this also may be implemented in an ASIC, where the priority/establishment routine is implemented in a functional block which may be referred to as an associator which associates respective display positions with corresponding position specifiers such that position specifiers which map to display positions which are already associated with position specifiers identifying more foreground positions on the display are not associated with display positions.

[0131] Referring to FIG. 16, an implementation employing an ASIC is shown generally at 260. In this implementation an ASIC is shown generally at 262 in communication with memory 264 in which the data structure 70 is stored, and in communication with memory 266 in which clipping tables are stored. View plane information 268 may be separately supplied to the ASIC or may be supplied through the data structure 70.

[0132] The ASIC includes a scanner functional block 270, an associator functional block 272, a mapper functional block 274, an identifier functional block 276 and memory 278 for holding the priority/completion buffer. The scanner 270 is operable to cooperate with the mapper 274 to determine a display position mapping, to determine respective display positions for given position specifiers. The scanner 270 also computes the scan order and scans voxel positions in the voxel block, according to the scan order, to scan the voxel block such that column positions, in respective planes through the voxel block that are progressively farther from the base point in the voxel block are addressed in order of those which map to foreground positions in the viewing plane before those that map to more background positions in the viewing plane, to produce position specifiers identifying renderable voxel positions in said voxel block.

[0133] The identifier 276 interacts with the memory 266 holding the clipping tables and with the data structure to identify renderable voxel positions.

[0134] The associator 272 is operable to initialize and interact with the priority/completion buffer 278. The associator 272 also associates respective display positions with corresponding position specifiers such that position specifiers which map to display positions which are already associated with position specifiers identifying more foreground positions on the display are not associated with display positions and provides display position voxel reference pairs identifying displays positions and references to voxels associated with these display positions. These display position/voxel reference pairs are provided at an output 280 of the ASIC and this output may be in communication with a processor circuit of the computer shown in FIG. 1, for example to provide the display position/voxel reference pair to a rendering or lighting program, for example. The use of an ASIC to implement the functions described herein can improve rendering speed.

[0135] While specific embodiments of the invention have been described and illustrated, such embodiments should be considered illustrative of the invention only and not as limiting the invention as construed in accordance with the accompanying claims. 

What is claimed is:
 1. A method of associating display positions on a display, with display information associated with voxels in a voxel block, said voxels being mappable to a display coordinate system defined by a view plane, in said display coordinate system, the method comprising: scanning voxel positions in said voxel block, according to a scan order in which column positions, in respective planes through said voxel block which are progressively farther from a base point of said voxel block are addressed in order of those which map to foreground positions in said view plane before those which map to more background positions in said view plane, to produce position specifiers identifying renderable voxel positions in said voxel block; determining respective display positions for each position specifier according to a display position mapping; and associating respective display positions with corresponding position specifiers such that position specifiers which map to display positions which are already associated with position specifiers identifying more foreground positions on said display are not associated with display positions.
 2. The method of claim 1 wherein associating comprises assigning references associated with respective said position specifiers to respective display positions, said references identifying display attributes of voxels at said respective position specifiers.
 3. The method of claim 2 further comprising providing said respective display positions and their associated references to a rendering routine.
 4. The method of claim 1 further comprising identifying said renderable voxel positions.
 5. The method of claim 4 wherein identifying said renderable voxel positions comprises identifying columns within a renderable column range.
 6. The method of claim 5 wherein identifying columns comprises addressing a plane and producing column addresses of columns progressively farther from an edge of said voxel block, in said plane.
 7. The method of claim 6 further comprising producing a position specifier for each voxel associated with a column address, when said column address is within said renderable column range.
 8. The method of claim 7 wherein identifying renderable voxels comprises identifying columns which have active voxels.
 9. The method of claim 8 wherein identifying columns, which have active voxels, comprises producing a column address and using said column address to locate active voxels in the column identified by said column address.
 10. The method of claim 5 wherein producing said column address comprises addressing a plane and producing column addresses of columns progressively farther from an edge of said voxel block, in said plane.
 11. The method of claim 1 further comprising determining a plane axis along which each plane in said succession of planes is defined.
 12. The method of claim 11 further comprising determining a column axis and producing column addresses specifying columns progressively farther from said plane axis in a plane in said succession of planes until a column address of a column within a renderable column range and having active voxels is located.
 13. The method of claim 12 wherein producing column addresses comprises producing a plane coordinate along said plane axis to specify a plane orthogonal to said plane axis and producing a column coordinate along said column axis to specify a column in said plane specified by said plane coordinate.
 14. The method of claim 13 wherein producing said position specifier comprises producing a set of coordinates specifying a column of voxels in an x-z plane of said voxel block and specifying a voxel in said column of voxels, said plane coordinate and said column coordinate specifying said column in said x-z-plane and a y-coordinate of said voxel block specifying said voxel in said column specified by said plane and column coordinates.
 15. The method of claim 1 further comprising storing an indication of whether or not a position specifier has been associated with a given display position.
 16. The method of claim 15 further comprising reading said indication when said given display position is computed for a given position specifier and outputting said reference to said given position specifier when said indication indicates that a position specifier has not already been associated with said given display position.
 17. The method of claim 1 further comprising executing an initialization routine prior to producing said set of position identifiers.
 18. The method of claim 17 wherein executing said initialization routine comprises determining said scan order and establishing a mapping between coordinates in said voxel block and said display positions.
 19. The method of claim 17 wherein computing said scan order comprises determining said base point and determining plane and column axes of said voxel block.
 20. The method of claim 19 wherein determining said base point comprises mapping corners of said voxel block, to said display coordinate system and producing normalized corner vectors for each mapped corner of said voxel block.
 21. The method of claim 20 further comprising finding a base corner vector from the origin in said display coordinate system to a mapped corner point of said voxel block, wherein said base corner vector forms a larger angle than all other corner vectors with a display orientation vector representing an orientation of said view plane.
 22. The method of claim 21 further comprising determining said display orientation vector.
 23. The method of claim 22 wherein determining said display orientation vector comprises finding which of two orthogonal vectors and their corresponding parity reverse counterparts, along display axes in the display coordinate system, is most parallel to a vector in the display coordinate system representing a mapping of a y-axis of the voxel block.
 24. The method of claim 19 wherein determining a plane axis comprises determining an edge of said voxel block, that contains said base point and that appears to extend in a direction progressing most rapidly away from said view plane when mapped to said display coordinate system and defining said plane axis as a line in said voxel coordinate system, coincident with said edge.
 25. The method of claim 24 wherein determining a column axis comprises defining as said column axis a line in said coordinate system which is coincident with said base point and which intersects said plane axis and which is at an angle to a y-axis of said voxel block.
 26. The method of claim 18 further comprising computing a parallel projection mapping for mapping points in said voxel block to points in said display coordinate system.
 27. The method of claim 18 further comprising producing a clipping table and using said clipping table to determine whether a voxel is renderable.
 28. The method of claim 27 wherein producing a clipping table comprises producing a table having fields associated with corresponding columns in said voxel block.
 29. The method of claim 28 further comprising populating said fields with indicators indicating whether or nor a set of position indicators is to be produced for corresponding columns.
 30. The method of claim 28 further comprising populating said fields with a range indicator indicating a range of voxels within a corresponding column, for which a set of position indicators is to be produced.
 31. The method of claim 18 further comprising initializing a priority completion buffer.
 32. The method of claim 31 further comprising storing in said priority completion buffer an indication of whether or not a given display position has been associated with a reference to a position specifier.
 33. The method of claim 32 further comprising reading said indication when said given display position is computed for a given position specifier and outputting said reference to said given position specifier when said indication indicates that a position specifier has not already been associated with said given display position.
 34. A method of associating display positions on a display, with display information associated with voxels in a voxel block, said voxels being mappable to a display coordinate system defined by a view plane, in said display coordinate system, the method comprising: for each plane in a succession of planes comprised of voxel columns in said voxel block, where said planes are progressively farther from said view plane and progressively farther from a base point in said voxel block, producing a set of position specifiers for renderable voxels in each column of said each plane; computing a display position for each position specifier in said set; and producing a reference to one of said position specifiers if a reference to said one of said position specifiers has not already been produced for said display position.
 35. A method of associating display positions on a display, with display information associated with voxels in a voxel block, said voxels being mappable to a display coordinate system defined by a view plane, in said display coordinate system, the method comprising: establishing a mapping between coordinates in said voxel block and display positions of said display; computing a scan order for scanning positions of said voxel block; scanning positions in said voxel block in said scan order and producing position specifier for positions which are to be considered for rendering; and using said mapping to produce a display position for each position specifier, and producing a reference to said position specifier if a reference to said position specifier has not already been produced for said display position.
 36. A method of associating display positions on a display, with display information associated with voxels in a voxel block, said voxels being mappable to a display coordinate system defined by a view plane, said voxel block having a base point in a voxel coordinate system, which maps to a point closest to said view plane, in said display coordinate system, the method comprising: determining from said voxel block and said view plane a parallel projection mapping for mapping points in said voxel block coordinate system to points in said display coordinate system; employing said parallel projection mapping to determine which corner of said voxel block appears closest to the view plane and to determine which edge of said voxel block appears to extend in a direction progressing most rapidly away from said view plane; defining a plane axis as an axis which is coincident with said edge which appears to extend in a direction progressing most rapidly away from said view plane and defining a column axis as a line which intersects said plane axis and which is at an angle to a y-axis of said voxel block; producing voxel position specifiers, each comprising a coordinate on said plane axis, a coordinate on said column axis and a coordinate on said y-axis, of voxels in columns, parallel to the column axis for successive positions along the plane axis which are progressively farther from said view plane; and computing a display position for each position specifier; and producing a reference to said position specifier if a reference to said position specifier has not already been produced for said display position.
 37. An apparatus for associating display positions on a display, with display information associated with voxels in a voxel block, said voxels being mappable to a display coordinate system defined by a view plane, in said display coordinate system, the apparatus comprising: scanning means for scanning voxel positions in said voxel block, according to a scan order in which column positions, in respective planes through said voxel block which are progressively farther from a base point in said voxel block are addressed in order of those which map to foreground positions in said view plane before those which map to more background positions in said view plane, to produce position specifiers identifying renderable voxel positions in said voxel block; mapping means for determining respective display positions for each position specifier according to a display position mapping; and associating means for associating respective display positions with corresponding position specifiers such that position specifiers which map to display positions which are already associated with position specifiers identifying more foreground positions on said display are not associated with display positions
 38. A computer readable medium for providing computer-readable instructions for directing a processor circuit to associate display positions on a display, with display information associated with voxels in a voxel block, said voxels being mappable to a display coordinate system defined by a view plane, in said display coordinate system, the instructions comprising: a first code segment for directing the processor circuit to scan voxel positions in said voxel block, according to a scan order in which column positions, in respective planes through said voxel block which are progressively farther from a base point in said voxel block are addressed in order of those which map to foreground positions in said view plane before those which map to more background positions in said view plane, to produce position specifiers identifying renderable voxel positions in said voxel block; a second code segment for directing the processor to determine respective display positions for each position specifier according to a display position mapping; and a third code segment for directing the processor circuit to associate respective display positions with corresponding position specifiers such that position specifiers which map to display positions which are already associated with position specifiers identifying more foreground positions on said display are not associated with display positions.
 39. A signal comprising code segments for directing a processor circuit to associate display positions on a display, with display information associated with voxels in a voxel block, said voxels being mappable to a display coordinate system defined by a view plane, in said display coordinate system, the code segments comprising: a first code segment for directing the processor circuit to scan voxel positions in said voxel block, according to a scan order in which column positions, in respective planes through said voxel block which are progressively farther from a base point in said voxel block are addressed in order of those which map to foreground positions in said view plane before those which map to more background positions in said view plane, to produce position specifiers identifying renderable voxel positions in said voxel block; a second code segment for directing the processor to determine respective display positions for each position specifier according to a display position mapping; and a third code segment for directing the processor circuit to associate respective display positions with corresponding position specifiers such that position specifiers which map to display positions which are already associated with position specifiers identifying more foreground positions on said display are not associated with display positions.
 40. An apparatus for associating display positions on a display, with display information associated with voxels in a voxel block, said voxels being mappable to a display coordinate system defined by a view plane, in said display coordinate system, the apparatus comprising: a scanner for scanning voxel positions in said voxel block, according to a scan order in which column positions, in respective planes through said voxel block which are progressively farther from a base point in said voxel block are addressed in order of those which map to foreground positions in said view plane before those which map to more background positions in said view plane, to produce position specifiers identifying renderable voxel positions in said voxel block; a mapper for determining respective display positions for each position specifier according to a display position mapping; and an associator which associates respective display positions with corresponding position specifiers such that position specifiers which map to display positions which are already associated with position specifiers identifying more foreground positions on said display are not associated with display positions.
 41. The apparatus of claim 40 wherein said associator is operable to assign references associated with respective said position specifiers to respective display positions, said references identifying display attributes of voxels at said respective position specifiers.
 42. The apparatus of claim 41 further comprising an output for providing said respective display positions and their associated references to a rendering routine.
 43. The apparatus of claim 40 further comprising an identifier for identifying said renderable voxel positions.
 44. The apparatus of claim 43 wherein said identifier is operable to identify columns within a renderable column range.
 45. The apparatus of claim 44 wherein said identifier is operable to address a plane in said succession of planes and produce column addresses of columns progressively farther from an edge of said voxel block, in said plane.
 46. The apparatus of claim 45 wherein said identifier is operable to produce a position specifier for each voxel associated with a column address, when said column address is within said renderable column range.
 47. The apparatus of claim 46 wherein said identifier is operable to identify renderable voxels comprises identifying columns which have active voxels.
 48. The apparatus of claim 47 wherein said identifier is operable to produce a column address and use said column address to locate active voxels in the column identified by said column address.
 49. The apparatus of claim 44 wherein said identifier is operable to address a plane in said succession of planes and to produce column addresses of columns progressively farther from an edge of said voxel block, in said plane.
 50. The apparatus of claim 40 wherein said scanner is operable to determine a plane axis along which each plane in said succession of planes is defined.
 51. The apparatus of claim 50 wherein said scanner is operable to determine a column axis and produce column addresses specifying columns progressively farther from said plane axis in a plane in said succession of planes until a column address of a column within a renderable column range and having active voxels is located.
 52. The apparatus of claim 51 wherein said scanner is operable to produce a plane coordinate along said plane axis to specify a plane orthogonal to said plane axis and produce a column coordinate along said column axis to specify a column in said plane specified by said plane coordinate.
 53. The apparatus of claim 52 wherein said scanner is operable to produce a set of coordinates specifying a column of voxels in an x-z plane of said voxel block and specify a voxel in said column of voxels, said plane coordinate and said column coordinate specifying said column in said x-z-plane and a y-coordinate of said voxel block specifying said voxel in said column specified by said plane and column coordinates.
 54. The apparatus of claim 40 further comprising a processor circuit for storing an indication of whether or not a position specifier has been associated with a given display position.
 55. The apparatus of claim 54 further comprising a processor circuit for reading said indication when said given display position is computed for a given position specifier and for outputting said reference to said given position specifier when said indication indicates that a position specifier has not already been associated with said given display position.
 56. The apparatus of claim 40 further comprising a processor circuit for executing an initialization routine prior to producing said set of position identifiers.
 57. The apparatus of claim 56 wherein said processor circuit is operable to determine said scan order and establish a mapping between coordinates in said voxel block and said display positions.
 58. The apparatus of claim 57 wherein said processor circuit is operable to determine said base point and determine plane and column axes of said voxel block.
 59. The apparatus of claim 58 wherein said processor circuit is operable to map corners of said voxel block, to said display coordinate system and produce normalized corner vectors for each mapped corner of said voxel block.
 60. The apparatus of claim 59 wherein said processor circuit is operable to find a corner vector, from the origin in said display coordinate system, to a mapped corner point of said voxel block, wherein said base corner vector forms a larger angle than all other corner vectors with a display orientation vector representing an orientation of said view plane.
 61. The apparatus of claim 60 wherein said processor circuit is operable to determine said display orientation vector.
 62. The apparatus of claim 61 wherein said processor circuit is operable to find which of two orthogonal vectors and their corresponding parity reverse counterparts, along display axes in the display coordinate system, is most parallel to a vector in the display coordinate system representing a mapping of a y-axis of the voxel block.
 63. The apparatus of claim 58 wherein said processor circuit is operable to determine an edge of said voxel block, that contains said base point and that appears to extend in a direction progressing most rapidly away from said view plane when mapped to said display coordinate system and to define said plane axis as a line in said voxel coordinate system, coincident with said edge.
 64. The apparatus of claim 63 wherein said processor circuit is operable to define as said column axis a line in said coordinate system which is coincident with said base point and which intersects said plane axis and which is at an angle to a y-axis of said voxel block.
 65. The apparatus of claim 57 wherein said processor circuit is operable to compute a parallel projection mapping for mapping points in said voxel block to points in said display coordinate system.
 66. The apparatus of claim 57 wherein said processor circuit circuit is operable to produce a clipping table and using said clipping table to determine whether a voxel is renderable.
 67. The apparatus of claim 66 wherein said processor circuit is operable to produce a table having fields associated with corresponding columns in said voxel block.
 68. The apparatus of claim 67 wherein said processor circuit is operable to populate said fields with indicators indicating whether or nor a set of position indicators is to be produced for corresponding columns.
 69. The apparatus of claim 67 wherein said processor circuit is operable to populate said fields with a range indicator indicating a range of voxels within a corresponding column, for which a set of position indicators is to be produced.
 70. The apparatus of claim 57 further comprising a priority completion buffer.
 71. The apparatus of claim 70 wherein said processor circuit is operable to store in said priority completion buffer an indication of whether or not a given display position has been associated with a reference to a position specifier.
 72. The apparatus of claim 71 wherein said processor circuit is operable to read said indication when said given display position is computed for a given position specifier and to output said reference to said given position specifier when said indication indicates that a position specifier has not already been associated with said given display position. 